/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package arbre;

import java.util.List;

/**
 *
 * @author Xuan Huy
 */
public interface Arbre {

    /**
     * La méthode retourne une liste de
     * <code>Noeud</code> qui contient toutes les feuilles de l'arbre.
     *
     * @return une liste des feuilles de l'arbre.
     */
    public List<Noeud> getFeuilles();

    /**
     * La méthode retourne la racine de l'arbre.
     *
     * @return la racine de l'arbre, ou <code>null</code> si l'arbre est vide.
     */
    public Noeud getRacine();

    /**
     * La méthode retourne la hauteur de l'arbre, i.e la hauteur de sa racine.
     *
     * @return la hauteur de l'arbre, ou <code>-1</code> si l'arbre est vide.
     */
    public int getHauteur();

    /**
     * La méthode permet d'insérer un nouveau noeud dans l'arbre actuel.
     *
     * @param noeud le nouveau noeud à insérer.
     */
    public void inserer(Noeud noeud);

    /**
     * La méthode recherche le noeud dont la clé est minimale dans l'arbre
     * actuel.
     *
     * @return le noeud dont la valeur de la clé est minimale.
     */
    public Noeud minimum();

    /**
     * La méthode recherche le noeud dont la clé est maximale dans l'arbre
     * actuel.
     *
     * @return le noeud dont la valeur de la clé est maximale.
     */
    public Noeud maximum();

    /**
     * La méthode recherche le noeud dont la clé vaut
     * <code>cle</code> dans l'arbre actuel.
     *
     * @param cle la valeur de la clé recherchée.
     * @return le noeud de l'arbre dont la valeur de la clé
     * vaut <code>cle</code>.
     */
    public Noeud rechercher(int cle);

    /**
     * La méthode permet de supprimer un noeud de l'arbre actuel.
     *
     * @param noeud le noeud à supprimer.
     * @return le noeud détaché suite à la suppression.
     */
    public Noeud supprimer(Noeud noeud);
}
